package jch.learn.java.advanced.chapter2_InputAndOutput;

import java.io.*;
import java.util.zip.ZipInputStream;

public class Test0 {

    public static void main(String[] args){
        try {
            String path = Test0.class.getResource("/chapter2/employee.dat").getPath();
            FileInputStream fin = new FileInputStream(path);
            byte b =(byte)fin.read();
            System.out.println("读取的字节：" + b);

            // 组合流处理器 从流中获取基本数据类型
            // 将FileInputStream连接到DataInputStream上获得从字节流中读取基本数据类型的能力 使用适配器模式
            // | 分离职责 使用装饰器模式（FileInputStream 负责读取文件数据，DataInputStream 负责将字节流转换为基础类型值
            DataInputStream din = new DataInputStream(fin);
            double d = din.readDouble();
            System.out.println("组合获取double值：" + d);

            // 获取带有缓冲区、基本数据类型转换 的数据处理器
            // BufferedInputStream 带有缓冲区IO处理器 中介流
            DataInputStream din1 = new DataInputStream(new BufferedInputStream(new FileInputStream(path)));

            // 带有缓冲区、预读取功能的输入流处理器
            // PushbackInputStream 带有预读取功能
            PushbackInputStream pin = new PushbackInputStream(new BufferedInputStream(new FileInputStream(path)));

            // 将各个IO处理器连接在一起获取不同流处理功能
            DataInputStream dpin = new DataInputStream(pin = new PushbackInputStream(new BufferedInputStream(new FileInputStream(path))));

            // 读取ZIP压缩文件
            ZipInputStream zin = new ZipInputStream(new FileInputStream(path));
            DataInputStream dataInputStream = new DataInputStream(zin);
            dataInputStream.read();
            // 读取过程 dataInputStream.read --> zin.read --> fileInputStream.read
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
